package com.hongyan;




/**
 * ////////////////////////////////////////////////////////////////////
 * //                          _ooOoo_                               //
 * //                         o8888888o                              //
 * //                         88" . "88                              //
 * //                         (| ^_^ |)                              //
 * //                         O\  =  /O                              //
 * //                      ____/`---'\____                           //
 * //                    .'  \\|     |//  `.                         //
 * //                   /  \\|||  :  |||//  \                        //
 * //                  /  _||||| -:- |||||-  \                       //
 * //                  |   | \\\  -  /// |   |                       //
 * //                  | \_|  ''\---/''  |   |                       //
 * //                  \  .-\__  `-`  ___/-. /                       //
 * //                ___`. .'  /--.--\  `. . ___                     //
 * //              ."" '<  `.___\_<|>_/___.'  >'"".                  //
 * //            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
 * //            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
 * //      ========`-.____`-.___\_____/___.-`____.-'========         //
 * //                           `=---='                              //
 * //      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^         //
 * //              佛祖保佑       永无BUG     永不修改                 //
 * ////////////////////////////////////////////////////////////////////
 * 验证二叉搜索树
 * Created by gaosong on 2020/6/21.
 */
public class Main98 {
    public static void main(String[] args) {

    }

    // 递归法
    public boolean isValidBST(TreeNode root) {
        return a(root,null,null);
    }

    /**
     *
     * @param node
     * @param low 下界
     * @param upper 上界
     * @return
     */
    public boolean a(TreeNode node, Integer low, Integer upper) {
        if(node == null){
            return true;
        }
        int val = node.val;
        if(low != null && val <= low) return false;
        if(upper != null && val >= upper) return false;

        return a(node.left,low,val) && a(node.right,val,upper);

    }
}
